/*
 * @Author: your name
 * @Date: 2021-10-13 20:08:26
 * @LastEditTime: 2021-10-15 09:35:08
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \luogu\动态规划\模板问题\P1164 小A点菜\main.cpp
 */
#include<iostream>
#include<algorithm>
using namespace std;

const int MMAX = 10010;
const int NMAX = 110;

int n[NMAX],m[MMAX];
int f1[NMAX][MMAX];
int f2[MMAX];

int main(){
    int in,im;
    cin >> in >> im;
    for(int i=1; i<=in; i++) cin >> n[i];

    // //二维数组
    // for(int i=1; i<=in; i++){
    //     for(int j=0; j<=im; j++){
    //         //f[i][j] 存储 前 i道菜 空间 j 有 f[i][j] 种方案
    //         //吃 第i道菜 有f[i-1][j-n[i]] 种方案
    //         //不吃 第i道菜 有f[i-1][j] 种方案
    //         if(j == n[i]) f1[i][j] = 1 + f1[i-1][j]; 
    //         else if(j > n[i]) f1[i][j] = f1[i-1][j-n[i]] + f1[i-1][j];
    //         else if(j < n[i]) f1[i][j] = f1[i-1][j];
    //     }
    //     // cout << "obj i=" << i << endl;
    //     // for(int j=0; j<=im; j++){
    //     //     cout << "j = " << j << " ";
    //     //     cout << f1[i][j] << endl;
    //     // }
    //     // cout << "------------------------------" << endl;
    // }

    //一维数组
    f2[0] = 1;
    for(int i=1; i<=in; i++){
        for(int j=im; j>=n[i]; j--){
            f2[j] = f2[j] + f2[j-n[i]];
        }
        //打印
        // cout << "n[i] = " << n[i] << endl;
        // for(int j=0; j<=im; j++){
        //     cout << "f2[" << j << "] = ";
        //     cout << f2[j] << endl;
        // }
        cout << endl;
    }
    // cout << f1[in][im] << endl;
    cout << f2[im] << endl;
    return 0;
}